package com.lwl.shua.class01;

/**
 * @author lwl
 * @Description // 一个数组中只有两种字符'G'和'B'，
 * // 可以让所有的G都放在左侧，所有的B都放在右侧
 * // 或者可以让所有的G都放在右侧，所有的B都放在左侧
 * // 但是只能在相邻字符之间进行交换操作，请问请问至少需要交换几次，
 * @date 2025/9/5 17:25
 */
public class Code04MinSwapStep {
    public static int minSwapStep(String s) {
        // 将所有 g 都移到左边，或者将所有 b 都移到左边，看那种成本最低
        char[] charArray = s.toCharArray();
        int gStep = 0;
        int gIndex = 0;
        for (int i = 0; i < charArray.length; i++) {
            if (charArray[i] == 'B') {
                continue;
            }
            gStep += i - gIndex;
            gIndex++;
        }
        int bStep = 0;
        int bIndex = 0;
        for (int i = 0; i < charArray.length; i++) {
            if (charArray[i] == 'G') {
                continue;
            }
            bStep += i - bIndex;
            bIndex++;
        }
        return Math.min(gStep, bStep);
    }
}
